import json

from client import es_client
from utils.date_utils import DateTimeCombiner
from utils.es_query_util import build_daily_query


async def get_schedule(data, before: int = 0):
    es = await es_client.get_es_client()
    # 判断是否打了卡，是第几次打卡，是否昨天的卡。 第几次打卡就在redis里存几。
    # 判断是否有跨天的考勤规则。先判断昨天的考勤规则，如果没有就判断今天的。
    time_query = build_daily_query(data["timestamp"], data["device_id"], days_before=before, days_after=1)
    results_scheduling = await es.search(
        index="p_employee_scheduling_personnel",
        query=time_query
    )
    return results_scheduling


def build_role(rule_time: list, dt: str):
    """
    根据考勤打卡规则中的ruleTime，和规则日期dt两个字段，获得要存入redis的规则，
    用于快速判断上传定位包的时间处在考勤中的什么时间。用于判断是否累计活跃度。
    是否进行上下班打卡
    :param rule_time:
    :param dt:
    :return:
    """
    role_redis = {}
    i = 0
    role_list = []
    for role in rule_time:
        base_date = DateTimeCombiner.combine(dt, role['clockInTime'])
        base_timestamp = DateTimeCombiner.parse_iso_to_timestamp(base_date)
        if role['nextDay']:
            base_timestamp = base_timestamp + 86400
        time_1 = base_timestamp - role['beforeTime'] / 1000
        time_2 = base_timestamp
        time_3 = base_timestamp + role['afterTime'] / 1000
        role_list.extend([time_1, time_2, time_3])
        if i == 1:
            role_redis['role_0'] = json.dumps(role_list)
            role_list = []
        elif i == 3:
            role_redis['role_1'] = json.dumps(role_list)
        i = i + 1
    return role_redis
